ローポリ化(Remesh and Bake Textures)
hr.icon
1. はじめに
ここではポリゴンの削減及びテクスチャのベイク方法を紹介する。
練習として、シーサーデータを利用してポリゴン削減とリメッシュの手順を理解する。
https://gyazo.com/87f6c85b16307e80fcf29543c4604514
次に自分の人体スキャンデータを用いた手順を紹介する。人体スキャンデータはシーサーデータよりも造形が複雑なためパラメータを調整する必要がある。
https://gyazo.com/bdc6bdffe282beace8c38501e042ded4
テクスチャベイクのクオリティは、リメッシュ構造やUV展開のクオリティも大きく影響する。
Blenderのベイク品質に限界がある場合は、ZBrush等の他のソフトやAddonを利用したほうがよい場合も多いだろう。
参考)リトポロジー専用Addon
今回の演習のポリゴン削減ではBlender標準のRemesh機能を利用するが、リトポロジーを行えばモデルの最適な形状を維持しながらポリゴン数を抑えることができる。Z-Brush等のスカルプトモデリングではポリゴン数を気にせずに造形重視でモデリングを行い、その後リトポロジー(メッシュ再構築)を行うのが一般的な手法となっている。リトポロジーは手動で行うこともできるが、自動でリトポロジーを行うソフトも増えている。
https://gyazo.com/c8ebb6a5b71e4f336c547974781350f3
hr.icon
2. 練習用シーサーデータの準備
シーサーデータはKibaco経由で配布する。
ダウロードしたshiisaa2022.zipを解凍する。
下図のようにOBJ、MTL、JPGの3つで構成される。
https://gyazo.com/eadaf0a9897487283253eebbfe2fcbd8
BlenderでOBJファイルを読み込む。下図のViewport Shading: Material Preview。
https://gyazo.com/90041303eed233b3831217eea4521bdf
hr.icon
3. ポリゴン削減
3.1 モデルの複製
複製(SHIFT+D)して、横に移動
Outlinerの名称をlowpolyに変更
元のオブジェクトの名称をhighpolyに変更
https://gyazo.com/580d8e86fd5308177ff9273d0e825546
Viewport ShadingのStatisticsにチェックを入れる。
https://gyazo.com/dcc656e096f3cce980d52ebc8781b558
Viewport左上にオブジェクトの情報が表示される。
Trianglesの左側:選択オブジェクトのポリゴン数
Trianglesの右側:Viewportに表示されているオブジェクトのポリゴン数
https://gyazo.com/bc8e9fd3b4d89cb10fbb74bcfd55227d
3.2 方法① Decimate Modifier(紹介のみ)
DecimateではUVが維持されるのでTextureを残したままポリゴン数を削減できる。
Decimateも用途しだいでは問題なく使える。
https://gyazo.com/7ac5c1e71eaa87105c418353b7f9a756
https://gyazo.com/8670f8811d72460969fb107a268632b4
3.3 方法② Remesh Modifier
今回はTexture Bakeの練習のために、あえてテクスチャが維持できないRemeshを用いる。
lowpolyモデルを選択して、Remesh Modifierを追加
Remesh > Voxel > Voxel Sizeを左右にドラックして、形状が最低限維持できる状態にする。
下図ではVoxel Size: 0.0223程度
https://gyazo.com/efe9f140f3805d306beb5bae86a92a63
参考)
3.4 Remshの適用
Remesh Modifierを適用(Apply)する。
https://gyazo.com/720939037e8dbd350f11763a6d4b11a9
3.5 Smoothing
ハイポリとローポリの両方にShade Smoothを設定する。
両方に必要なので注意
https://gyazo.com/c4e0dbb5f1a6aa4a15dfe7aa443e08f0
hr.icon
4. Texture Bake
4.1 Texture Bakeとは
ポリゴン構造が変化することで、テクスチャー構造も変化する。元のUV Mapが使えなくなるため、新しいUV Mapを作成した上でテクスチャを投影し直す。この手法をBakeと呼ぶ。Bakeはローポリ化目的に限らず、Normal MapやBump Map、Generativeなテクスチャ等、ベイクすることでレンダリングが効率化する目的でも行われる。
https://gyazo.com/00b2ee2b5cc0d223af96b849d9150536
参考)
4.2 ローポリ用のマテリアルの作成
lowpolyオブジェクトを選択した上で、Material Propertiesパネルを表示する。
https://gyazo.com/87982cfac44113bba961d7dbce028468
shiisaa_metashapeをUnlink(☓アイコン)する
新規マテリアルの作成
https://gyazo.com/5bcec28e1fa9410cd36a2a99f1981093
4.3 ローポリ用のテクスチャ画像の作成
Shading Workspaceに切り替える
Shader EditorでImage Textureノードを追加
Image TextureノードのColorソケットとPrinciple BSDFのBase Colorソケットを接続
https://gyazo.com/5b062c35dacec168649757eec869e27d
Image TextureノードのNEWをクリック
Name: Baked
Width: 2048, Height: 2048(解像度が高いほどノイズは小さくなるが処理が重くなる)
https://gyazo.com/9f5e4326c2378b2fc509c3060aa491b2
Image Editorで作成したBakedを読み込んでおく。
https://gyazo.com/46ded8446429a3db0977c0db9772b289
4.4 ローポリ用のUV Mapの構築
UV Editing Workspaceに切り替える
下図のように3D ViewportはEdit Modeになっているので、Aキーですべての頂点を選択
左のUV EditorにBakedを読み込む
下図右下のUV Mapsには何もない=UM Mapは存在しないことが確認できる
https://gyazo.com/51f03c0127b299b038fd9046e6b3f1a8
UVメニュー > Smart UV Projectをクリック
メモ)SmartUVProjectは機械構造に適しており人体には不向きらしい。Unwrapを使う場合もある。
https://gyazo.com/2e1b101a9b65c549a381815ac3e27342
下図では何も変更せずにUnwrapをクリック
https://gyazo.com/5b1a0cca947b0b7553d3bed3e5e2faeb
UV Mapが作成される
下図右下のUV MapsにUVMapが追加されていることが確認できる
https://gyazo.com/f9063228f711067dc08781e0f7d08f25
4.5 Bakeのためのレンダリング設定
BakeにはCyclesレンダラーを使用(Eeveeでは不可)するので、Render Properties > Render Engine: Cyclesに切り替える。
また、以下の複数の設定を行う。
Render > Max Samples: 1(テクスチャ投影なので処理を軽くするため)
メモ)10に設定している事例もある。どの程度の数値でクオリティに差が出るのか不明。
Render > Denoiseのチェックを外す
Light Path
Total: 3
Diffuse: 3
Glossy: 3
Transmission: 3
上記設定値は、YouTube等で調べた方法だが、はっきりとした根拠は不明。
https://gyazo.com/d3d9c343abcc8b1fe124b851dab41e10
参考)
続けて、Bakeの設定を行う。
Bake Type: Diffuse
Influence > Colorのみにチェックを入れる(他を外す)
Selected to Activeにチェック
Extrusion: 0.1(0.01〜0.1程度)
オブジェクトの表層の厚み方向のテクスチャの投影範囲
人体のように胴体と腕が近いような状況で調整必要(腕のテクスチャが胴体に投影される等が起こる)
問題が起こるようならCageの設定も必要
https://gyazo.com/5e9861f1415c8b636822e3777ba18414
4.6 Bake
Sading Workspaceに切り替える
lowpolyオブジェクトを選択して、位置をクリア(Option+G)
https://gyazo.com/96934b47fcc5f456f2a38e1b1e11be0d
メモ)このときにlowpolyオブジェクトのImage Textureノードを選択している必要があると解説しているYouTubeもあるが、選択していなくてもBakeできている。
lowpolyをアクティブな状態(薄いオレンジ)でshiisaa_metashapeと複数選択
方法① Cmdキーを押しながら、shiisaa_metashape(highpoly)、lowpolyの順で選択
方法② SHIFTキーを押しながら、lowpoly、shiisaa_metashape(highpoly)の順で選択(Outlineで連続して表示されている場合のみ)
https://gyazo.com/769d79672ca54b02031ac5533d43f1f5
Bakeボタンを押す。
https://gyazo.com/746fb3af975bb8b2792c52408c64d74b
下図のように処理状況が表示される。
Mac Book Air 2022で5秒程度でレンダリング完了する。
https://gyazo.com/fa1fea20d5e5dc5b7ec51fa3b2d6c6a0
Bakeが完了して、lowpolyのテクスチャが生成される。
https://gyazo.com/ff38fbdcaf1f5b2cbd060a71d73fc212
shiisaa_metashapeを非表示にして確認する。
MaterialのRoughnessを1.0に設定すると光沢がなくなり、もとのテクスチャのみの表示が可能。
https://gyazo.com/d506fc8d5cb93099f55e0c049464b834
この時点ではテクスチャ画像はメモリにあるだけで保存されていない。
Image Editor > Imageメニュー > Saveで忘れずに保存する。
https://gyazo.com/6940ea71ab4ee3f66b08efb6d3d3b27e
必要に応じてOBJデータを書き出す。
その際、highpolyは非表示にした状態でlowpoly(位置はリセットした状態)の書き出しを行う。
hr.icon
5. 人体スキャンデータのローポリ化
5.1 人体スキャンデータの準備(調整前)
すでに調整している場合は*.5から始める。
https://gyazo.com/f1a4f0ace8898cde81aa1c9a94b1c907
Viewport OverlaysのStatisticsにチェックを入れてポリゴン数を表示しておく。
https://gyazo.com/1b1e55ab270fe170706a166a843c3467
5.2 不要なものの削除
https://gyazo.com/3655aed60ba6131048d8cdf734eb4cb1
Edit Mode、X-Rayモードに切り替える。不要な頂点を選択して削除(X)する。
必要なオブジェクトの一部を削除したい場合はDissolve(溶解、Cmx+X)やSculptのスムーズを行う。
https://gyazo.com/18cf277e43d556f8f59c59ccf4316c2c
5.3 姿勢の調整
私もかなり姿勢が悪くなっていることがわかる。CGなので真っすぐしてもよいだろう。
SculptモードのPoseツールで調整できる。
https://gyazo.com/25780ce233aa9cc4ae4d26223f74fc92
5.4 調整したデータの書き出し
調整したデータは他に利用する場合のためにOBJ等に書き出しておくとよい。
MaterialのPath ModeはCopyしておく。
https://gyazo.com/fd2a10ec9a6708af3b7eb1d0c325105c
5.5 調整済モデルの読み込み
Outlinerでハイポリモデルの名称をhighpolyに変更しておく。
https://gyazo.com/d59ef0a8f94bd9ffa1d53f89ae9e37eb
以降、shiisaa同様なので省略して紹介
5.6 ローポリ化
Remeshでポリゴン程度に削減する。
まず、Voxel Sizeで顔の凹凸や指の状態が維持できる程度に調整する。
この時点で15万ポリゴン以上程度。
https://gyazo.com/ac8cbdeca0f8ca1870ede54286788cec
次にAdaptivityを調整することで、凹凸を維持したまま、凹凸の低い部分にポリゴン数を下げることができる。
下図では25000ポリゴンまで下げている。
Voxel Size: 0.0122
Adaptivity: 0.25
設定値によってポリゴンが破綻する場合もあるので、Adaptivityはあまり下げすぎないほうがよい。
https://gyazo.com/272189497f0a5211fc78fb32c1a307ce
lowpoly用テクスチャ画像の作成、UVMapの作成等を行う。
https://gyazo.com/b837cb99da9811489f0d47c49f98dd8c
テクスチャ生成後に破綻している場所があれば、設定値を見直す。
https://gyazo.com/b67ed522e62e7b36f5fec9f02993ab8c
最後にテクスチャ画像の保存を忘れずに行う。
highpolyは非表示にした状態でlowpoly(位置はリセットした状態)の書き出しを行う。